package com.hugeyurt.direct;
import com.rabbitmq.client.*;

public class ConsumerDirect
{
    private final static String QUEUE_NAME = "my_queue4";

    public static void main(String[] args) throws Exception
    {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost"); // RabbitMQ服务器地址
        factory.setUsername("guest"); // 默认用户名
        factory.setPassword("guest"); // 默认密码
        factory.setPort(5672);//设置端口号
        // 声明队列（需要与生产者配置一致）
        //创建连接对象
        Connection connection = factory.newConnection();
        //创建信道
        Channel   channel = connection.createChannel();


      /*  DeliverCallback deliverCallback= new DeliverCallback() {
            public void handle(String s, Delivery delivery) throws IOException {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] Received '" + message + "'");

                // 手动消息确认（需要关闭自动确认）
               // channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
            }
        };*/
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {

            String message = new String(delivery.getBody(), "UTF-8");

            System.out.println(" [x] Received '" + message + "'");
            // 手动消息确认（需要关闭自动确认）
            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

        };

        CancelCallback cancelCallback = (consumerTag) -> {
            System.out.println(" [x] Cancelled");
        };

        // 消费消息（关闭自动确认）
        /*
         1 消费哪个队列，指定队列名称
         2 消费成功后，是否自动应答；true 自动应答
         3、接收消息的回调函数
         4、取消消息的回调函数

         */
        channel.basicConsume(QUEUE_NAME, false, deliverCallback, cancelCallback);
    }
}